From: Michel Dänzer Date: Thu, 12 Dec 2024 16:55:08 +0000 (+0100) Subject: lightbox: Use variable magnitude for dithering noise X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~177^2^2~15 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=8005cce443a38b2101731d794bbce9b69f958d2a;p=gnome-shell.git lightbox: Use variable magnitude for dithering noise The magnitude of the noise in the final output scales with: 1.0 - cogl_color_out.a A fixed value for the magnitude relative to cogl_color_out.a might be too small for large cogl_color_out.a or too large for small cogl_color_out.a (or possibly even both). Compensate for this to achieve constant magnitude in the final output. The coefficients were determined experimentally as a compromise between preventing colour banding with dark background content and tolerable noise with bright background content. This helps for the issue described in https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7795 . Part-of: (cherry picked from commit 60dd2cd7a80d61a2fe5caebf80f85fe0191dc97e) --- diff --git a/js/ui/lightbox.js b/js/ui/lightbox.js index 56b4d78c5..766ce227b 100644 --- a/js/ui/lightbox.js +++ b/js/ui/lightbox.js @@ -23,7 +23,8 @@ vec2 position = cogl_tex_coord_in[0].xy - 0.5; \n\ float t = clamp(length(1.41421 * position), 0.0, 1.0); \n\ float pixel_brightness = mix(1.0, 1.0 - vignette_sharpness, t); \n\ cogl_color_out.a *= 1.0 - pixel_brightness * brightness; \n\ -cogl_color_out.a += (rand(position) - 0.5) / 100.0; \n'; +float noise_magnitude = (2.0 / ((1.0 - cogl_color_out.a) * 255.0)); \n\ +cogl_color_out.a += (rand(position) - 0.5) * noise_magnitude; \n'; const RadialShaderEffect = GObject.registerClass({